<?php
// +----------------------------------------------------------------------
// | sfadmin - Suifeng Administration
// +----------------------------------------------------------------------
// | Copyright (c) 2017-2020 http://suifeng.tech All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: suifeng <1787585212@qq.com>
// +----------------------------------------------------------------------

namespace app\admin\model;

use suifeng\Model;

class Group extends Model
{
    protected $name = 'admin_group';

    public function query_count($where_list)
    {
        $where_map = $this->_build_where_map($where_list);
        return $this->where($where_map)
            ->count();
    }

    public function query_list($where_list, $page_num, $page_size, $sort_field, $sort_order)
    {
        $where_map = $this->_build_where_map($where_list);
        return $this->where($where_map)
            ->page($page_num, $page_size)
            ->order($sort_field, $sort_order)
            ->select();
    }

    private function _build_where_map($where_list)
    {
        $where_array = array();

        foreach ($where_list as $field => $value) {
            if ($value) {
                if ($field == 'search_word') {
                    $where_array['title'] = array('like', $value);
                } else {
                    $where_array[$field] = $value;
                }
            }
        }

        return $where_array;
    }

    //$where['m_username|mnickname'] = array('like', "%{$keyword}%", 'or');






    /**
     * 检查部门功能权限
     * @author jry <598821125@qq.com>
     */
    public function checkMenuAuth()
    {
        $user_group = model('Admin/Access')->getFieldByUid(session('user_auth.uid'), 'group'); // 获得当前登录用户信息
        if ($user_group == ADMIN_SUPER_GROUP_ID) {
            return true; // 超级管理员无需验证
        }

        if ($user_group) {
            // 获得当前登录用户对应群组的权限列表
            $group_info = $this->find($user_group);
            $group_auth = json_decode($group_info['menu_auth'], true);

            $current_menu = model('Admin/Module')->getCurrentMenu(); // 当前菜单
            if ($current_menu && $group_auth) {
                if (in_array($current_menu['id'], $group_auth[request()->module()])) {
                    return true;
                }
            }
        }

        return false; // 未授权
    }

    public function get_xxx($a, $b, $c)
    {
        return null;
    }

    /**
     * 获取缓存的群组列表。
     *
     * @return array
     */
    public function get_cached_list()
    {
        $list = cache('model_admin_group::get_cached_list');

        if (!$list || APP_DEBUG) {
            $where['status'] = array('eq', 1);
            $order = 'sort asc, id asc';

            $rows = $this->where($where)
                ->order($order)
                ->select();

            $list = array();
            foreach ($rows as $row) {
//                 $row['menu_auth'] = $row['menu_auth'] ? json_decode($row['menu_auth']) : array();
//                 $row['admin_roles'] = $row['admin_roles'] ? json_decode($row['admin_roles']) : array();
                $row['admin_auth'] = $row['admin_auth'] ? json_decode($row['admin_auth'], true) : array();
                $list[$row['id']] = $row->getData();
            }

            cache('model_admin_group::get_cached_list', $list);
        }

        return $list;
    }

    /**
     * 获取缓存的群组信息。
     *
     * @param unknown $key
     * @return unknown|NULL
     */
    public function get_cached_group($key)
    {
        $group_list = $this->get_cached_list();
        return array_key_exists($key, $group_list) ? $group_list[$key] : null;
    }

    /**
     * 清除缓存。
     */
    public function clear_cache()
    {
        cache('model_admin_group::get_cached_list', null);
    }

    public function scopeEnabled($query)
    {
        $query->where('status', '=', 1);
    }




//     /**
//      * 属性处理。
//      */
//     protected function _after_fetch_row(&$row)
//     {
//         $row['menu_auth'] = $row['menu_auth'] ? json_decode($row['menu_auth']) : array();
//         $row['admin_roles'] = $row['admin_roles'] ? json_decode($row['admin_roles']) : array();
//         $row['admin_auth'] = $row['admin_auth'] ? json_decode($row['admin_auth']) : array();
//     }

//     /**
//      * 获取群组列表。
//      */
//     public function get_list()
//     {
//         $list = cache('model_group_list');
//         if (!$list || APP_DEBUG) {
//             $where['status'] = array('eq', 1);
//             $order = 'sort asc, id asc';
//             $rows = $this->fetch_list($where, $order);

//             $list = array();
//             foreach ($rows as $row) {
//                 $list[$row['id']] = $row;
//             }

//             cache('model_group_list', $list);
//         }
//         return $list;
//     }

//     /**
//      * 检查是否有角色?
//      *
//      * @param unknown $group_id
//      * @param unknown $role_name
//      * @return boolean
//      */
//     public function has_role($group_id, $role_name)
//     {
//         if ($group_id == ADMIN_SUPER_GROUP_ID) {
//             return true; // 超级管理员
//         }

//         $group_list = $this->get_list();
//         if (isset($group_list[$group_id])) {
//             $group_info =  $group_list[$group_id];
//         } else {
//             $group_info =  array();
//         }

//         return in_array($role_name, $group_info['admin_roles']);
//     }

//     /**
//      * 检查是否有权限?
//      *
//      * @param unknown $group_id
//      * @param unknown $permission_name
//      * @return boolean
//      */
//     public function has_permission($group_id, $permission_name)
//     {
//         if ($group_id == ADMIN_SUPER_GROUP_ID) {
//             return true; // 超级管理员
//         }

//         $group_list = $this->get_list();
//         if (isset($group_list[$group_id])) {
//             $group_info =  $group_list[$group_id];
//         } else {
//             $group_info =  array();
//         }

//         return in_array($permission_name, $group_info['admin_auth']);
//     }

//     /**
//      * 清除缓存。
//      */
//     public function clear_cache()
//     {
//         cache('model_group_list', null);
//     }
}
